package cn.xiaobai;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @Author yangdaji
 * @Date 2023/8/12
 * @PackageName cn.xiaobai
 * @ClassName HolidayAnalyzeApplication
 */
@SpringBootApplication
public class HolidayAnalyzeApplication {

    public static void main(String[] args) {
        SpringApplication.run(HolidayAnalyzeApplication.class, args);
    }

    /*
        这是一个通过请求接口的方式去处理业务
        主要处理将传入的日期进行分析, 并判断工作日, 假期, 节日(不一定是假期),并返回对应的状态码
        // 节日和假期可以通过现成的api 进行测试, 看是否是属于假期, 比如拿节气, 儿童节啊等等,

        // 休息日判断, 判断是否是周6,周7, 有特殊情况, 有些假期包含周末
        // 思路: 编写休息日和假期的文件, 就只提供休息日和假期, 通过传入的日期去判断是否是休息日,假期, 否则就是工作日
        //      这样会存在一个问题, 就是这个休息日和假期的文件需要手动维护, 而且假期和休息日的变动还需要根据国家发布的假期变动来更改
        //      解决思路: 通过现成的api 刷新数据文件, 需要做防止api 不通的情况, 所以需要做自己生成
        //      自己生成存在的问题,每年的节假日不固定, 可以通过计算得到, 但是可能计算量较大, 需要判断闰年, 平年, 以及大月,小月, 然后需要定义一个初始年份
        //      通过初始年份的节假日去推算第二年的对应日期是否和第一年一样, 一样则不变, 否则还是需要根据闰年,平年 大月,小月去推算这个节假日在第二年的日期
        //      有几个是不变的日期, 元旦, 国庆, 建党, 建军(但是不属于假期), 劳动节, 妇女节, 有些是农历节日, 春节
        // 而农历的节日需要通过阳历进行转换

        // 计算方法
         阳历日期推算阴历日期的方法：阴历日期是以月亮的圆缺为计月单位，其以逢朔为初一，以月望为十五（大月为十六日），以月晦为二十九日（大月为三十 日）。
         然而目前记时通常用阳历日期表达，如欲将阳历日期换算成阴历日期可以用以下两种方法：其一是查《新编万年历》，
         如查1984年6月8日是阴历几日？ 翻开万年历6月10日是阴历十一，则逆推6月8日是阴历初九。
         其二可以利用公式推算阴历日期：
            设：公元年数－1977（或1901）＝4Q＋R
            则：阴历日期=14Q+10.6(R+1)+年内日期序数-29.5n
            （注:式中Q、R、n均为自然数，R<4）

            例：1994年5月7日的阴历日期为：
            1994－1977＝17＝4×4＋1
            故：Q＝4，R＝1 则：5月7日的阴历日期为：
            14×4+10.6(1+1)+(31+28+31+31+7)-29.5n
            =204.2- 29.5n
            然后用29.5去除204.2得商数6......27.2，6即是n值，余数27即是阴历二十七日。

            2023年8月12日的阴历:
            2023-1997=26=4x6+2
            所以Q=6, R=2
            则计算阴历日期:
            14x6+10.6(2+1)+(31+28+31+30+31+30+31+12)-29.5n
            =84+31.8+224-29.5n
            =339.8-29.5n
           29.5n=339.8
           n=339.8/29.5=11....


            2023-1907=116=4x29+0
            Q=29,R=0
            14x29+10.6+224-29.5

            年内日期序数:
              例: 1月1日为第一天, 1月2日为第二天, 1月31日为第31天
              给定一个日期: 8月12日, 则日期序数:
              在前7个月中: 一月是31, 二月是28, 三月是31, 四月是30,五月是31,六月是30,七月是31
              则计算得到: 31+28+31+30+31+30+31=212, 再计算: 212+12=224天
              所以8月12日是在该年的 222天

        公式不对, 计算有误

        所以可以根据闰年, 大月,小月
        闰年:
        大月: 1,3,5,7,8,10,12
        小月: 4,6,9,11
        特殊: 2 闰年:29天, 平年 28天
        闰年:366天, 平年: 365
        闰年判断: 能被4,
        平年判断: 能被100整除,不能被400整除

        为什么选择 4, 100, 400: 每4年中会多出约0.25天, 而每100年中会减少约0.25天,而400年周期近视于地球公转周期
        推算地球公转周期约 365.2425天, 大约是 365的 1/4 天
        使用 400 年的周期可以更准确的调整日历以反应地球公转的时间, 400年总共有 97个闰日,使平均年长度接近365.2425天
        因此400 可以更准确的推算出闰年



     */
}
